View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0001587 | K18X001.00 SKB SWAN | SW | public | 2022-12-27 11:02 | 2023-01-03 16:15 |
| Reporter | (ALTech) Sangmin Choi | Assigned To | Due Date | 2022-12-27 18:00 | |
| Priority | normal | Severity | s4-minor | Reproducibility | N/A |
| Status | closed | Resolution | fixed | ||
| Summary | 0001587: Please apply this patch from BPM-9053. | ||||
| Description | Hi, Jason, Please apply this patch from BPM-9053. Commit Message is as follows. [BPM-9053] Change stream method for DMX to frame-in mode. vendor/synaptics/btv-hal-impl/synaptics AI2-100-amp_wrapper-2.patch syna-release/ampsdk AI2-100-vdec-1.patch Thank you. | ||||
| Additional Information | https://jira.skbroadband.com/browse/BPM-9053 | ||||
| Tags | No tags attached. | ||||
| Attach Tags | |||||
| User List |
(SW) Jim Chen |
|---|
|
|
AI2-100-vdec-1.patch (20,362 bytes)
diff --git a/amp/src/ddl/vcodec/comp_vdec/source/ddl_vdec.c b/amp/src/ddl/vcodec/comp_vdec/source/ddl_vdec.c
index 1c74a88..9f3a6bd 100755
--- a/amp/src/ddl/vcodec/comp_vdec/source/ddl_vdec.c
+++ b/amp/src/ddl/vcodec/comp_vdec/source/ddl_vdec.c
@@ -233,6 +233,7 @@ typedef struct {
// for dump
FILE *fpYUV;
FILE *fpES;
+ FILE *fpES2;
// for checking allocate memory size
UINT32 uiPrevYuvWidth;
UINT32 uiPrevYuvHeight;
@@ -298,7 +299,7 @@ static const UINT32 uiBlockSize = 64;
static HRESULT putGuardBlock(COMPONENT hInstance, AMP_BD_HANDLE hBD,
INT32 x, INT32 y);
static HRESULT dumpYUV(COMPONENT hInstance, AMP_BD_HANDLE hBD);
-static HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD);
+static HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD, BOOL input);
static UINT32 g_bIsGuardEntering = 0;
static UINT32 g_bIsGuardLeaving = 0;
@@ -687,6 +688,12 @@ static HRESULT DDL_VDEC_doDestroy(COMPONENT hInstance)
fclose(pHld->fpES);
pHld->fpES = NULL;
}
+ if (pHld->fpES2) {
+ VDEC_LOGI("dump es done before return\n");
+ fclose(pHld->fpES2);
+ pHld->fpES2 = NULL;
+ }
+
if (pHld->fpYUV) {
VDEC_LOGI("dump yuv done\n");
fclose(pHld->fpYUV);
@@ -883,7 +890,9 @@ HRESULT DDL_VDEC_Open(COMPONENT hInstance,
pPort->stInfo.pMediaCap[0] = 0xf000000;
pHld->uMode = config->mode;
- pHld->uCBufSize = config->uiSHMSize;
+ if ((config->uiFlag & AMP_VDEC_MODE_FRAME_IN) == 0) {
+ pHld->uCBufSize = config->uiSHMSize;
+ }
pHld->hLastBD = NULL;
pHld->hVdec = NULL;
@@ -1523,11 +1532,15 @@ static HRESULT handleSetupPort(COMPONENT hInstance, AMP_PORT_IO ePortIo,
PORT *pPeerPort = &hPeerInstance->pPort[AMP_PORT_OUTPUT][pPort->stConn.uiPeerPortIdx];
pHld->uCBufSize = pPeerPort->stInfo.uiBufSize;
DDL_COMPONENT_UnlockConnection(hInstance, AMP_PORT_INPUT, uiPortIdx);
- VDEC_LOGH("NOTE: DMX SetupPort, uCBufSize=0x%x\n", pHld->uCBufSize);
+ if(!VDec_IsFrameInMode(pHld->hVdec)) {
+ VDEC_LOGH("NOTE: DMX SetupPort, uCBufSize=0x%x\n", pHld->uCBufSize);
- result = Vdec_ConfigCBlock(pHld->hVdec, pHld->uCBufSize, 0, 0,
- pHld->uWrapBufAddr, pHld->uWrapBufAddrVir);
- DDLAssertReturn(result);
+ result = Vdec_ConfigCBlock(pHld->hVdec, pHld->uCBufSize, 0, 0,
+ pHld->uWrapBufAddr, pHld->uWrapBufAddrVir);
+ DDLAssertReturn(result);
+ } else {
+ VDEC_LOGH("NOTE: not set CBUF pool size under frame in mode, uCBufSize=0x%x\n", pHld->uCBufSize);
+ }
} else {
VDEC_LOGH("NOTE: OMX or others SetupPort, uCBufSize = 0x%x\n", pHld->uCBufSize);
result = Vdec_ConfigCBlock(pHld->hVdec, pHld->uCBufSize, 0, 0,
@@ -2404,6 +2417,7 @@ HRESULT DDL_Callback(UINT32 uiEvent, UINT32 uiParam1, UINT32 uiParam2,
DDLAssertReturn(DescPoolSetFlagByAddr(pHld->hStrmDescPool,
pVmetaDescTag->uDesc, VMETA_DESC_SLOT_FREE));
+ dumpES(hInstance, hBD, FALSE);
DDLAssertReturn(AMP_BDTAG_DelTail(hBD));
hRet = BDTagGetVMetaDesc(hBD, &pVmetaDescTag);
if (hRet == SUCCESS) {
@@ -2412,8 +2426,9 @@ HRESULT DDL_Callback(UINT32 uiEvent, UINT32 uiParam1, UINT32 uiParam2,
}
UINT32 uNum = 0;
DDLAssertReturn(DescPoolGetBusyNumber(pHld->hStrmDescPool, &uNum));
- VDEC_LOGM(COMPVDEC"Return Stream BD=%p bdid=%d left (%d)\n",
- hBD, AMP_BD_GET_BDID(hBD), uNum);
+ VDEC_LOGH(COMPVDEC"Return Stream BD=%p bdid=%d size:%d, left (%d)\n",
+ hBD, AMP_BD_GET_BDID(hBD), pTag->uSize, uNum);
+
DDLAssertCheck(AMP_SHM_Unref(pTag->uMemHandle));
DDLAssertReturn(releaseStrmBuf(hInstance, hBD));
}
@@ -2695,7 +2710,7 @@ HRESULT VDEC_ACTION_PushBuf(VDEC_HLD *pHld, AMP_BD_HANDLE hBD) {
0, 0, FALSE));
}
#endif
- VDEC_LOGM(COMPVDEC"Push stream %p (%x)\n", hBD, AMP_BD_GET_BDID(hBD));
+ VDEC_LOGH(COMPVDEC"Push stream %p (%x), size:%d\n", hBD, AMP_BD_GET_BDID(hBD), pDesc->size);
if ((pTag->uFlag & AMP_MEMINFO_FLAG_FLUSH_MASK) != 0) {
DDLAssertCleanup(fillFlushBDBuffer(hInstance, pTag->uFlag));
@@ -2718,7 +2733,7 @@ HRESULT VDEC_ACTION_PushBuf(VDEC_HLD *pHld, AMP_BD_HANDLE hBD) {
}
BDResetUnitStart(pHld->hVdec, hBD);
- dumpES(hInstance, hBD);
+ dumpES(hInstance, hBD, TRUE);
DDLAssertCleanup(Vdec_EmptyThisBuffer(pHld->hVdec, hBD));
return hRet;
@@ -3183,7 +3198,7 @@ Exit:
return SUCCESS;
}
-HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD)
+HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD, BOOL input)
{
#ifndef ENABLE_VDEC_DUMP_ES
MV_UNUSED(hInstance);
@@ -3192,6 +3207,7 @@ HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD)
VDEC_HLD *pHld = hInstance->pHld;
VDecoder *pVDec;
FILE **fpp = &(pHld->fpES);
+ FILE **fpp2 = &(pHld->fpES2);
HRESULT ret = SUCCESS;
VOID *pVirtAddr = NULL;
VOID *pPhyAddr = NULL;
@@ -3209,6 +3225,12 @@ HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD)
fclose(*fpp);
*fpp = NULL;
}
+ if (*fpp2 != NULL) {
+ VDEC_LOGH("dump es done\n");
+ fclose(*fpp2);
+ *fpp2 = NULL;
+ }
+
return SUCCESS;
}
@@ -3252,6 +3274,37 @@ HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD)
}
}
+ if (*fpp2 == NULL) {
+ char filename[FILENAME_LEN] = {0};
+ char *dirname;
+ if (g_pDumpDirName[0] == '\0') {
+ dirname = checkDumpDir();
+ if (dirname == NULL) {
+ return VDEC_IOFAIL;
+ }
+ } else {
+ dirname = g_pDumpDirName;
+ }
+ char *timebuf = getFTime();
+ if (timebuf == NULL) {
+ return HRESULT_GEN(VDEC, ERR_NOSWRSC);
+ }
+ ret = snprintf(filename, FILENAME_LEN, "%s/vdec_%s_%p_%s_bak.es",
+ dirname, showFmtId(pVDec->strmCfg.format), pVDec, timebuf);
+ free(timebuf);
+ if (ret > FILENAME_LEN) {
+ VDEC_LOGE("filename %s greater than %d\n", filename, FILENAME_LEN);
+ return HRESULT_GEN(VDEC, ERR_NOSWRSC);
+ }
+ VDEC_LOGH("vdec %p dump es to file %s\n", pHld, filename);
+ *fpp2 = fopen(filename, "w");
+ if (*fpp2 == NULL) {
+ VDEC_LOGE("open file fail %d %s\n", errno, strerror(errno));
+ return VDEC_IOFAIL;
+ }
+ }
+
+
if (ShmType & AMP_SHM_FLAG_SECURE) {
#ifdef TZ_DUMP
if (register_debugTA() == SUCCESS) {
@@ -3289,8 +3342,14 @@ HRESULT dumpES(COMPONENT hInstance, AMP_BD_HANDLE hBD)
}
BD_SwConsume(hBD, pVDec->pTeeCtx);
- fwrite((UINT8 *)pVirtAddr, 1, pStrmBufDesc->size, *fpp);
- fflush(*fpp);
+
+ if (input) {
+ fwrite((UINT8 *)pVirtAddr, 1, pStrmBufDesc->size, *fpp);
+ fflush(*fpp);
+ } else {
+ fwrite((UINT8 *)pVirtAddr, 1, pStrmBufDesc->size, *fpp2);
+ fflush(*fpp2);
+ }
#endif
return SUCCESS;
diff --git a/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c b/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c
index 2351249..cf71064 100755
--- a/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c
+++ b/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c
@@ -3178,7 +3178,7 @@ static HRESULT consume_user_data_sei(VDecoder *pVDec, USER_DATA_BLOCK_HEADER *pH
pVDec->sHdrInfo.MaxFALL = readU16(p + 2);
return SUCCESS;
default:
- VDEC_LOGH("%p: ignore user_data SEI type=%x", pVDec, pHeader->m_type);
+ VDEC_LOGL("%p: ignore user_data SEI type=%x", pVDec, pHeader->m_type);
return ERR_UNHANDLED;
}
}
@@ -4454,6 +4454,7 @@ static HRESULT return_str_buf(VDecoder *pVDec) {
pVDec->uNoDecStrmSize -= pStrmBufDescInChecking->size;
if (pVDec->uiDecodeMode != AMP_VDEC_IOPARAM_DECODE_REVERSE) {
+ VDEC_LOGH("pVDec:%p, return_es, hBD:%p\n", pVDec, hBDInChecking);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32)hBDInChecking, 0, pVDec->uiCBData))
}
@@ -4541,6 +4542,7 @@ static HRESULT internal_stop_stream(VDecoder *pVDec) {
for (i = 0; i < uNum; i++) {
VDECLOGIFERR(AMP_BDCHAIN_PopItem(pVDec->pvMetaBufQueue, &hBD))
if (pVDec->uiDecodeMode != AMP_VDEC_IOPARAM_DECODE_REVERSE) {
+ VDEC_LOGH("pVDec:%p, return_es, hBD:%p\n", pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32) hBD, 0, pVDec->uiCBData))
}
@@ -4550,6 +4552,7 @@ static HRESULT internal_stop_stream(VDecoder *pVDec) {
for (i = 0; i < uNum; i++) {
VDECLOGIFERR(AMP_BDCHAIN_PopItem(pVDec->pStrmBufQueue, &hBD))
if (pVDec->uiDecodeMode != AMP_VDEC_IOPARAM_DECODE_REVERSE) {
+ VDEC_LOGH("pVDec:%p, return_es, hBD:%p\n", pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32) hBD, 0, pVDec->uiCBData))
}
@@ -4571,6 +4574,7 @@ static HRESULT internal_stop_stream(VDecoder *pVDec) {
case CMD_IBUFNOTIFY:
if (pVDec->uiDecodeMode != AMP_VDEC_IOPARAM_DECODE_REVERSE) {
unpackMsgIBuf(msg, &hBD, NULL);
+ VDEC_LOGH("pVDec:%p, return_es, hBD:%p\n", pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32)hBD, 0, pVDec->uiCBData))
}
@@ -5906,7 +5910,6 @@ HRESULT decode_video(VDecoder *pVDec) {
VMETA_CBLOCK *pCblk = pVDec->pStrmCtrlBlock->pVir;
MV_UNUSED(pCblk);
- VDECPRT("tony trace inside decode_stream_main_loop - 2-1. enter decode_video() \n", __LINE__);
if (pHalDecoder->check_strm_buffer
&& (pVDec->bInFlush == false)
&& (pCblk->uFrameInMode == FRAME_IN_NO_32B_ALIGN)
@@ -5927,6 +5930,7 @@ HRESULT decode_video(VDecoder *pVDec) {
SETSTATE(pVDec->eState, VDEC_STATE_WAIT_INPUT_BUFFER)
VDEC_LOGH("%p:"BUFSTR"Check Stream Count %d\n", pVDec,
pVDec->uiPushedStrmBufCount);
+ updateStrmThreshFrameCheck(pVDec);
return SUCCESS;
}
}
@@ -5941,7 +5945,6 @@ HRESULT decode_video(VDecoder *pVDec) {
return SUCCESS;
VdecAssertReturn(hRet);
- VDECPRT("tony trace inside decode_stream_main_loop - 2-2. before pHalDecoder->decode_stream() \n", __LINE__);
while (1) {
int dret = 0;
int ud;
@@ -5958,7 +5961,6 @@ HRESULT decode_video(VDecoder *pVDec) {
VDEC_LOGE("%p: pHalDecode recoverable error=%d, continue to decode", pVDec, dret);
}
- VDECPRT("tony trace inside decode_stream_main_loop - 2-3. before waitIRQ() \n", __LINE__);
if(pHalDecoder->waitIRQ){
if (pVdecStrmStatus->wait_for_int) {
//VDECPRT("%p:before Int\n", pVDec);
@@ -5969,7 +5971,6 @@ HRESULT decode_video(VDecoder *pVDec) {
}
}
- VDECPRT("tony trace inside decode_stream_main_loop - 2-4. after waitIRQ() \n", __LINE__);
performance_monitor(pVDec, pVdecStrmStatus, ud);
#ifndef TRUSTZONE
if((pVdecStrmStatus->event_id == VDEC_EVENT_SYNCWORD) && (pCblk->uiUserDataMask != 0)){
@@ -5999,7 +6000,6 @@ HRESULT decode_video(VDecoder *pVDec) {
break;
}
- VDECPRT("tony trace inside decode_stream_main_loop - 2-5. if we reach here.... () \n", __LINE__);
// if we reach here,
// 1) One frame decoding finished, switch point comes
// 2) VDEC_EVENT_ALLOC_STR_BUF
@@ -6133,12 +6133,14 @@ static void decode_stream_process_msg(VDecoder *pVDec, MV_CC_MSG_t *pMsg) {
if (uEndPos < pVDec->uGopStartPos) {
VDECPRT("%p:"REVERSE" recycle stream buffer %p\n", pVDec, hBD);
VDECLOGIFERR(AMP_BDCHAIN_PopItem(pVDec->pRevStrmQueue, &hBD));
+ VDEC_LOGH("pVDec:%p, return_es, hBD:%p\n", pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32) hBD, 0, pVDec->uiCBData));
} else if (uEndPos - pVDec->uGopStartPos >
uiThresh) {
VDECPRT("%p:"REVERSE" recycle stream buffer %p\n", pVDec, hBD);
VDECLOGIFERR(AMP_BDCHAIN_PopItem(pVDec->pRevStrmQueue, &hBD));
+ VDEC_LOGH("pVDec:%p, return_es, hBD:%p\n", pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32) hBD, 0, pVDec->uiCBData));
} else {
@@ -6185,7 +6187,7 @@ static void decode_stream_process_msg(VDecoder *pVDec, MV_CC_MSG_t *pMsg) {
// Maybe need to come up with better solution in up layer API.
//
// If user want to cache, then cache in PAUSE.
- VDEC_LOGH("%p:"BUFSTR" Receive BD %p in idle state.\n", pVDec, hBD);
+ VDEC_LOGH("%p:"BUFSTR" Receive BD %p in idle state, return_es\n", pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32) hBD, 0, pVDec->uiCBData))
} else {
@@ -6245,7 +6247,7 @@ static void decode_stream_process_msg(VDecoder *pVDec, MV_CC_MSG_t *pMsg) {
}
if (VdecProcessBD(pVDec, hBD) == false || pBigDesc->uSize == 0) {
- VDECPRT("%p:"BUFSTR"skip strm hBD=%p as no meminfo or size is 0",
+ VDEC_LOGH("%p:"BUFSTR"skip strm hBD=%p as no meminfo or size is 0, return_es\n",
pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32)hBD, 0, pVDec->uiCBData));
@@ -6258,7 +6260,7 @@ static void decode_stream_process_msg(VDecoder *pVDec, MV_CC_MSG_t *pMsg) {
// Maybe need to come up with better solution in up layer API.
//
// If user want to cache, then cache in PAUSE.
- VDECPRT("%p:"BUFSTR" Receive BD %p in idle state.\n", pVDec, hBD);
+ VDEC_LOGH("%p:"BUFSTR" Receive BD %p in idle state, return_es\n", pVDec, hBD);
VDECLOGIFERR(pVDec->hCB(AMP_VDEC_EVENT_EMPTY_ES_DONE,
(UINT32) hBD, 0, pVDec->uiCBData))
} else {
@@ -6475,7 +6477,6 @@ INT decode_stream_main_loop(VDecoder *pVDec) {
SETSTATE(pVDec->eState, VDEC_STATE_WAIT_INPUT_BUFFER);
return 0;
}
- VDECPRT("tony trace inside decode_stream_main_loop - 1. after VDEC_STATE_WAIT_INPUT_BUFFER \n", __LINE__);
if (pVDec->uiDecodedIndex > 0) {
// judge the display buffer number, in case the VDEC_EVENT_ALLOC_DIS_BUF event
unsigned int uNum;
@@ -6485,24 +6486,20 @@ INT decode_stream_main_loop(VDecoder *pVDec) {
return 0;
}
}
- VDECPRT("tony trace inside decode_stream_main_loop - 2. after VDEC_STATE_WAIT_OUTPUT_BUFFER \n", __LINE__);
if (decode_video(pVDec) != SUCCESS)
break;
- VDECPRT("tony trace inside decode_stream_main_loop - 3. after decode_video \n", __LINE__);
msg.m_MsgID = CMD_NONE;
while (MV_CC_MsgQ_TryGetMsg(pVDec->hDecodeMsgQueue, &msg) == S_OK) {
AMP_ASSERT(msg.m_MsgID != (UINT32) CMD_NONE);
if (msg.m_MsgID == CMD_FREEZE) {
msg.m_Param2 = TRUE;
VDECLOGIFERR(MV_CC_MsgQ_PostMsg(pVDec->hDecodeMsgQueue, &msg));
- VDECPRT("tony trace inside decode_stream_main_loop - 4. hDecodeMsgQueue \n", __LINE__);
return 0;
}
decode_stream_process_msg(pVDec, &msg);
if (msg.m_MsgID == CMD_TERMINATE) {
VDECPRT("%p Exit Decode task\n", pVDec);
- VDECPRT("tony trace inside decode_stream_main_loop : 5. CMD_TERMINATE proceeded \n", __LINE__);
return -1;
}
msg.m_MsgID = CMD_NONE;
@@ -6654,12 +6651,9 @@ VOID VDec_Decode_Task(VOID *hVDec) {
VDECLOGIFERR(MV_Timer_CreateEx(&pVDec->hStatusLogTimer, pVDec->uiStatusLogPeriod * 1000,
VideoStatusProcess, hVDec, "VideoStatusProcess"));
VDECLOGIFERR(MV_Timer_Start(&pVDec->hStatusLogTimer));
- pid_t tid = gettid();
while (1) {
msg.m_MsgID = CMD_NONE;
- VDEC_LOGH("tony trace VDec comp event loop before(tid=%d) - tony_counter=%d\n", tid, ++tony_counter);
MV_CC_MsgQ_GetMsg(pVDec->hDecodeMsgQueue, &msg);
- VDEC_LOGH("tony trace VDec comp event loop after(msgID = %d(%s), (tid=%d)) - tony_counter=%d\n", msg.m_MsgID, msgtostr(msg.m_MsgID), tid, --tony_counter);
AMP_ASSERT(msg.m_MsgID != (UINT32) CMD_NONE);
if (msg.m_MsgID == CMD_FREEZE) {
VDEC_LOGH("%p:receive freeze\n", pVDec);
@@ -6681,13 +6675,10 @@ VOID VDec_Decode_Task(VOID *hVDec) {
if (bStreamFreeze == FALSE) {
decode_stream_process_msg(pVDec, &msg);
- VDEC_LOGH("tony trace before decode_stream_main_loop() state = %d\n", pVDec->eState);
if (decode_stream_main_loop(pVDec) < 0) {
- VDEC_LOGH("tony trace ERROR in decode_stream_main_loop() state = %d\n", pVDec->eState);
VDEC_LOGH("%p:Exit Decode task\n", pVDec);
return;
}
- VDEC_LOGH("tony trace after decode_stream_main_loop() state = %d\n", pVDec->eState);
}
}
}
diff --git a/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.c b/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.c
index 2f12854..81c68b3 100755
--- a/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.c
+++ b/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.c
@@ -66,6 +66,7 @@
#define THRESH_FRAME_NUM 3
#define THRESH_B_FRAME_NUM 20
#define SEQUENCE_CHECK_COUNT 4
+#define THRESH_ES_NUM 10
HRESULT initThreshFrameCheck(VDecoder *pVDec) {
VMETA_CBLOCK *pCblk = pVDec->pStrmCtrlBlock->pVir;
@@ -136,3 +137,30 @@ HRESULT updateThreshFrameCheck(VDecoder *pVDec, EVENT_CELL *pEventCell) {
#endif
return SUCCESS;
}
+
+HRESULT updateStrmThreshFrameCheck(VDecoder *pVDec) {
+#ifdef DYNAMIC_THRESH
+ VMETA_CBLOCK *pCblk = pVDec->pStrmCtrlBlock->pVir;
+ UINT32 uTempThreshold = 0;
+ UINT32 uCurTiming = 0;
+
+ if (pVDec->uiLastFrameTime) {
+ uCurTiming = AMP_GetCurrentTimeMS() - pVDec->uiLastFrameTime;
+ }
+
+ if (uCurTiming > 40) {
+ if (pVDec->uiPushedStrmBufCount > THRESH_ES_NUM) {
+ uTempThreshold = pVDec->uNoDecStrmSize/pVDec->uiPushedStrmBufCount;
+ if (uTempThreshold < pCblk->uThreshFrameCheck) {
+ pCblk->uThreshFrameCheck = uTempThreshold;
+
+ VDECPRT("%p: update thresh: %d BDs (%d bytes) in HWVDEC, "
+ "timing=%dms, uThreshFrameCheck=%d\n",
+ pVDec, pVDec->uiPushedStrmBufCount, pVDec->uNoDecStrmSize,
+ uCurTiming, pCblk->uThreshFrameCheck);
+ }
+ }
+ }
+#endif
+ return SUCCESS;
+}
diff --git a/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.h b/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.h
index 4221bbb..9183bc2 100644
--- a/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.h
+++ b/amp/src/ddl/vcodec/comp_vdec/source/vdec_misc.h
@@ -51,6 +51,7 @@
HRESULT initThreshFrameCheck(VDecoder *pVDec);
HRESULT updateBitRateThreshFrameCheck(VDecoder *pVDec, UINT32 bit_rate);
HRESULT updateThreshFrameCheck(VDecoder *pVDec, EVENT_CELL *pEventCell);
+HRESULT updateStrmThreshFrameCheck(VDecoder *pVDec);
#endif
AI2-100-amp_wrapper-2.patch (1,932 bytes)
diff --git a/amp_wrapper.c b/amp_wrapper.c
index 840e067..9249fad 100644
--- a/amp_wrapper.c
+++ b/amp_wrapper.c
@@ -882,6 +882,7 @@ void amp_create_pipeline_bottom_half(AVP_HANDLE *player, BOOL enableCloseCaption
amp_config._d = AMP_COMPONENT_VDEC;
amp_config._u.pVDEC.mode = AMP_SECURE_TUNNEL;
amp_config._u.pVDEC.uiType = v_codec;
+ amp_config._u.pVDEC.uiFlag = 1 << 9; // use frame-in mode
/* TODO : ??????
if (amp_zapping_mgr.enable_nr) {
amp_config._u.pVDEC.uiFlag |= 1 << 6;
@@ -1066,6 +1067,10 @@ void amp_create_pipeline_bottom_half(AVP_HANDLE *player, BOOL enableCloseCaption
output_config.eType = AMP_DMX_OUTPUT_VES;
output_config.Tag = 0;
output_config.uPid = v_pid;
+ output_config.uAlign = 2;
+ output_config.eESOutputMode = AMP_DMX_ES_OUTPUT_MODE_UNITSTART_ALIGN;
+ output_config.uBufSize = 8 * 1024 * 1024;
+ output_config.uBufPaddingSize = 2 * 1024 * 1024;
socPlayerInfo->dmx_output_v.uiPortIdx = AMP_DMX_ANY_PORT_IDX;
amp_log(socPlayerInfo->pip ? 1:0, "amp_create_pipeline_bottom_half 14 in, AVP_START");
AMP_RPC(ret, AMP_DMX_AddChannel, socPlayerInfo->amp_dmx, &output_config, &socPlayerInfo->dmx_output_v);
@@ -1089,6 +1094,10 @@ void amp_create_pipeline_bottom_half(AVP_HANDLE *player, BOOL enableCloseCaption
output_config.eType = AMP_DMX_OUTPUT_AES;
output_config.Tag = 0;
output_config.uPid = a_pid;
+ output_config.uAlign = 2;
+ output_config.eESOutputMode = AMP_DMX_ES_OUTPUT_MODE_UNITSTART_ALIGN;
+ output_config.uBufSize = 1 * 1024 * 1024;
+ output_config.uBufPaddingSize = 16 * 1024;
socPlayerInfo->dmx_output_a.uiPortIdx = AMP_DMX_ANY_PORT_IDX;
amp_log(socPlayerInfo->pip ? 1:0, "amp_create_pipeline_bottom_half 17 in, AVP_START");
AMP_RPC(ret, AMP_DMX_AddChannel, socPlayerInfo->amp_dmx, &output_config, &socPlayerInfo->dmx_output_a);
|
|
|
Hi Sangmin, Apply patch done. Thank you. Dean |
|
|
Hello, Dean, Thank you! |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2022-12-27 11:02 | (ALTech) Sangmin Choi | New Issue | |
| 2022-12-27 11:02 | (ALTech) Sangmin Choi | Status | new => assigned |
| 2022-12-27 11:02 | (ALTech) Sangmin Choi | Assigned To | => (SW) Jason Ling |
| 2022-12-27 11:02 | (ALTech) Sangmin Choi | File Added: AI2-100-vdec-1.patch | |
| 2022-12-27 11:02 | (ALTech) Sangmin Choi | File Added: AI2-100-amp_wrapper-2.patch | |
| 2022-12-27 12:27 |
|
Assigned To | (SW) Jason Ling => (SW) Dean Chiang |
| 2022-12-27 12:28 |
|
Issue Monitored: (SW) Jim Chen | |
| 2022-12-27 15:54 |
|
Note Added: 0011586 | |
| 2023-01-03 16:15 | (ALTech) Sangmin Choi | Status | assigned => closed |
| 2023-01-03 16:15 | (ALTech) Sangmin Choi | Resolution | open => fixed |
| 2023-01-03 16:15 | (ALTech) Sangmin Choi | Note Added: 0011631 |